SyntaxNet GPU版安装
SyntaxNet GPU版安装
安装Bazel
前提条件:JDK1.8
git clone https://github.com/bazelbuild/bazel.git cd bazel ./compile.sh
安装好之后,将$HOME/bazel/bazel-bin/src/加入环境变量.bash_profile
PATH=$PATH:$HOME/bazel/bazel-bin/src export PATH
安装SyntaxNet
下载syntaxnet
git clone --recursive https://github.com/tensorflow/models.git cd models/syntaxnet/tensorflow ./configure cd .. bazel test syntaxnet/... util/utf8/...
这个时候你会发现有些软件需要下载,但是又无法download。好在机器还可以 wget 或 git clone下载。
下载依赖软件
models/syntaxnet/tensorflow/tensorflow/workspace.bzl 文件给出了需要 依赖的文件。最新版的syntaxnet需要依赖gmock1.7, eigen, farmhash, jpegsrc, libpng, six, re2, grpc.
url的用wget去下载;git地址用git clone下来,如果有init_submodules=True, 你需要git clone --recursive下载。commit = "xxxxx", 等下载好之后 git checkout xxxxx 到对应的版本上去。
依赖软件存放的位置
先执行 bazel build syntaxnet/... util/utf8/... 等5-6秒后ctrl-c关闭, 这个时候切换到~/.cache/bazel/_bazel_lisheng.ls/xxxxxxxx/external/ 你会发现很多文件夹,比如eigen_archive, grpc等。带有archive的文 件夹,把压缩包放在对应的文件夹内,之后解压缩,这个时候还需要从 models/syntaxnet/tensorflow/下把对应的BUILD文件拷贝过来直接命名为 BUILD (gmock的BUILD文件在 models/syntaxnet/tensorflow/google/protobuf/gmock.BUILD);不带 archive的就直接把对应的文件夹拷贝过来覆盖。
N.B. _bazel_lisheng.ls跟用户名关联,比如你是michael,对应的路径就是_bazel_michael
编译CPU版本
bazel test syntaxnet/... util/utf8/... --fetch=false
注意一定要加上 --fetch=fasle这个选项,目的就是不要让它去远程获取了。 如果一切顺利,最后测试通过就OK了。
编译GPU版本 (前提你要有GPU)
配置:
cd models/syntaxnet/tensorflow ./configure
N.B. 不要Google Cloud相关东西,那个选项输入N。 配置一下cuda相关东西,云GPU上配置一直默认就可以了。
配置完切换到 models/syntaxnet/tools/目录下,修改一下bazel.rc文件,添加 如下命令
build:cuda --define=using_cuda=true --define=using_cuda_nvcc=true
然后:
cd /models/syntaxnet/tensorflow/third_party/gpus/cuda
修改 BUILD 文件的172行的 "cd third_party/gpus/cuda" 为 "cd tensorflow/third_party/gpus/cuda" 类似下面这个函数,不保证以后的版本会不会是172行...
cmd = if_cuda( # Under cuda config, create all the symbolic links to the actual cuda files "OUTPUTDIR=`{} -f $(@D)/../../..`; cd third_party/gpus/cuda; OUTPUTDIR=$$OUTPUTDIR ./cuda_config.sh --check;".format(readlink_command()), ... )
最后:
bazel test syntaxnet/... util/utf8/... --fetch=false --config=cuda
等待编译完成吧,貌似会有个测试无法通过,但不影响最后的使用...
吐槽
内心是痛苦的,这玩意折腾了两天,网上也没有现成的方案。现记录与此希望 可以帮助到你。 编译完之后,我发现mxnet比它好多了,简单的Makefile就可以搞定所有 的编译。Google为了强推自己的工具,搞的太复杂了,先是bazel,后是 tensorflow,syntaxnet的gpu版还编译不通,估计也没指望我们用GPU吧:(
Anyway, Have Fun with SyntaxNet!
备注:
我在编译的时候,还关闭了tensorboard的编译,这个编译还需要下载很多 东西。编译sytanxnet应该不需要这个,如果遇到遇到关于tensorboard问题,把 models/syntaxnet/tensorflow/tensorflow/ 下的tensorboard文件夹移走,放 一个与syntaxnet无关的目录。
syntaxnet在使用GPU的时候,调度起了两个显卡(机器有两个显卡),一个显卡内 存全部占用,另一个只占了100MB。但观察下来,它只用全部占用的那个显卡进行计 算,显卡利用率在30%左右。